如何开始在 Oracle Solaris 11 中创建 Oracle Solaris 区域

2011 年 11 月

作者:Duncan Hardie

如何创建 Oracle Solaris 区域、在该区域中安装应用程序,并克隆该区域以便快速、轻松地产生多个重复的资源受控环境。


简介

本文将帮助您熟悉 Oracle Solaris 11 中 Oracle Solaris 区域配置和管理的基本操作。

希望将类似本文的技术文章发送到您的收件箱吗?请订阅系统社区新闻快讯 — 仅包含面向系统管理员和开发人员的技术内容。

在 Oracle Solaris 10 中,Oracle Solaris 区域技术允许您创建不同的隔离环境以满足特定应用程序的需要,所有环境都在同一 Oracle Solaris 实例上。您不必运行和管理多个操作系统在多个系统上托管多个应用程序,只需运行和管理一个操作系统并将每个应用程序放在一个区域中。因此您不必将时间和资源花在管理多个操作系统上,只需管理多个区域。这样简单得多。

Oracle Solaris 11 将 Oracle Solaris 区域技术置于其核心,将 Oracle Solaris 区域与关键 Oracle Solaris 11 特性相集成。例如,与新的软件管理架构紧密集成简化了 Oracle Solaris 11 和 Oracle Solaris 区域的部署。

Oracle Solaris 区域使您可以将一个应用程序与同一操作系统上的其他应用程序隔离开来,从而允许您创建一个隔离环境,用户可登录该环境并从 Oracle Solaris 区域内部执行所需的操作,而不影响该区域外部的任何程序。此外,Oracle Solaris 区域还可以不受外部攻击和内部恶意程序的影响。每个 Oracle Solaris 区域都包含一个完整的资源受控环境,允许您分配 CPU、内存、网络和存储等资源。

如果您是系统管理员,可以选择严格管理所有 Oracle Solaris 区域,也可以将权限分配给特定 Oracle Solaris 区域的其他管理员。这种灵活性允许您对整个计算环境进行量身定制以满足特定应用程序的需要,全部在同一操作系统内实现。

实施环境概述

在本方法指南中,我们将建立三个 Oracle Solaris 区域,一个用于为开发人员托管测试环境 (testzone),两个用于托管面向 Web 的应用程序(webzone-1webzone-2),这三个区域并存在一个系统上。

每个区域将突出区域的一个简单特性以便于您了解区域:

  • 通过 testzone,我们将了解如何使用命令行创建区域。
  • 通过 webzone-1,我们将了解如何向区域添加应用程序。
  • 通过 webzone-2,我们将了解如何克隆区域。

测试区域将受益于 Oracle Solaris 区域技术的隔离功能。您可以快速创建区域,然后将其移交给开发组。该组的管理员可以独立管理环境,测试工程师可以自由安装他们需要的程序包,所有这些都与系统的其余部分隔离。我们还将看到 Oracle Solaris 11 中的映像包系统 (IPS) 如何使 Oracle Solaris 区域变得非常精简,从而使系统资源用于应用程序而非虚拟化技术。

第一个 Web 区域 webzone-1 将用于安装运行在线销售点 (POS) Web 服务器的 Web 环境。在此,可以通过分配适当的资源保证服务水平来确保完成交易。Oracle Solaris 区域技术使您不仅能够控制 CPU 和内存,而且还能控制网络带宽和对存储的访问。这是通过与其余 Oracle Solaris 11 核心特性(如网络虚拟化和基于 ZFS 的存储)紧密集成来实现的。

第二个 Web 区域 webzone-2 是为应对 POS 环境的需求高峰而创建的。需要尽快增加一个 Web 服务器来应对增加的流量。我们将使用 Oracle Solaris 区域中提供的克隆特性来完成这一添加。该特性是业内的一个常用技术,创建一个金版(即模板)并基于原件生成新环境。我们将看到使用 Oracle Solaris 区域技术,这一过程的速度是多么惊人,我们还将看到我们能节省多少磁盘空间。这种克隆过程可用于根据需要快速生成多个重复的环境,又快又轻松,它在云环境中可能有巨大用途。

按照本文中的步骤进行操作之后,将配置好三个区域环境,如图 1 所示。每个区域将其文件系统置于 /zones ZFS 数据集上,并将拥有通过物理数据链路(网络端口 e1000g0)的专用网络连接。Web 区域还将包含 Apache Web 服务器应用程序。

图 1

图 1. 文件系统都位于 /zones 上且访问一个网络端口的三个区域

:“全局区域”指的是系统的默认区域,也用于系统范围的管理控制。

了解了我们要尝试的目标之后,下面介绍实现该目标的步骤。

图 2 显示将使用的设置。

图 2

图 2. 三个区域及配置细节

创建第一个区域:testzone

本文重点介绍快速启动和运行 Oracle Solaris 区域实例所需的任务。有关创建 Oracle Solaris 区域涉及的所有步骤以及如何配置其属性的完整讨论,请参见 Oracle Solaris 管理:Oracle Solaris 区域、Oracle Solaris 10 区域和资源管理

开始之前

检查 ZFS 文件系统和网络的状态:

root@global:~# zfs list | grep zones
root@global:~# dladm show-link
LINK                CLASS     MTU    STATE    OVER
e1000g0             phys      1500   up       --
e1000g1             phys      1500   unknown  --

我们注意到,没有与任何区域相关的 ZFS 数据集,也没有虚拟 NIC 设备。

第 1 步:配置 Oracle Solaris 区域

首先使用命令行创建一个简单的测试区域,如清单 1 所示。

清单 1:创建区域
root@global:~# zonecfg -z testzone
testzone: No such zone configured
Use 'create' to begin configuring a new zone.
zonecfg:testzone> create
create: Using system default template 'SYSdefault'
zonecfg:testzone> set zonepath=/zones/testzone
zonecfg:testzone> set autoboot=true
zonecfg:testzone> set bootargs="-m verbose"
zonecfg:testzone> verify
zonecfg:testzone> commit
zonecfg:testzone> exit

如果在此阶段收到任何配置错误消息,请参见 Oracle Solaris 管理:Oracle Solaris 区域、Oracle Solaris 10 区域和资源管理

提示:如果 zonepath 中包括区域的名称,跟踪区域文件就会轻松得多。

在本例中,我们将区域命名为 testzone 并选择 /zones/testzone 作为该区域的安装位置。而且,该区域在引导时将自动以详细方式启动。这样做,我们就不必在系统重新启动后手动启动区域,并且还会看到所有服务均启动。

默认情况下,所有 Oracle Solaris 区域均配置有一个名为 anet 的自动 VNIC,它会自动为我们提供一个网络设备。(稍后再详细讨论此网络设备的配置。)我们现在还看不到这个网络设备,因为它是在区域引导时自动创建的,并且在区域关闭时自动删除。这可以使用 dladm 命令来检查:

root@global:~# dladm show-link
LINK                CLASS     MTU    STATE    OVER
e1000g0             phys      1500   up       --
e1000g1             phys      1500   unknown  --

可以使用 zoneadm 命令验证该区域现在是否处于已配置状态:

root@global:~# zoneadm list -cv
  ID NAME             STATUS     PATH                           BRAND    IP    
   0 global           running    /                              solaris  shared
   - testzone         configured /zones/testzone                solaris  excl  

第 2 步:安装区域

区域配置完成后,现在需要安装它,如清单 2 所示。

特别要注意,Oracle Solaris 11 中的 Oracle Solaris 区域要使用 IPS 特性来创建。您需要确保有权访问 IPS 信息库。在本例中,我们有权通过网络访问 IPS 信息库。有关 IPS 的更多信息,请参见 Oracle Solaris 11 映像包管理系统 (IPS) 基础知识简介

清单 2:安装区域
root@global:~# zoneadm -z testzone install
 A ZFS file system has been created for this zone.
Progress being logged to /var/log/zones/zoneadm.20111016T114436Z.testzone.install
       Image: Preparing at /zones/testzone/root.

 Install Log: /system/volatile/install.6677/install_log
 AI Manifest: /tmp/manifest.xml.zVaybn
  SC Profile: /usr/share/auto_install/sc_profiles/enable_sci.xml
    Zonename: testzone
Installation: Starting ...

              Creating IPS image
              Installing packages from:
                  solaris
                      origin:  http://pkg.oracle.com/solaris/release/
DOWNLOAD                                  PKGS       FILES    XFER (MB)
Completed                              167/167 32062/32062  175.8/175.8

PHASE                                        ACTIONS
Install Phase                            44311/44311 

PHASE                                          ITEMS
Package State Update Phase                   167/167 
Image State Update Phase                         2/2 
Installation: Succeeded


        Note: Man pages can be obtained by installing pkg:/system/manual

 done.

        Done: Installation completed in 110.519 seconds.


  Next Steps: Boot the zone, then log into the zone console (zlogin -C)

              to complete the configuration process.

Log saved in non-global zone as /zones/testzone/root/var/log/zones/zoneadm.20111016T114436Z.testzone.install

区域只用了 110 秒即完成安装。与其他虚拟化技术相比速度相当快,这反映了 Oracle Solaris 区域的轻量级本质。

可以使用 zoneadm 命令检查我们安装的区域的状态:

root@global:~# zoneadm list -iv
  ID NAME             STATUS     PATH                           BRAND    IP    
   0 global           running    /                              solaris  shared
   - testzone         installed  /zones/testzone                solaris  excl  

zonepath 必须位于 ZFS 数据集上,在安装区域时自动创建。可以使用 zfs 命令对此进行检查,如清单 3 所示。

清单 3:检查 Zonepath
root@global:~# zfs list | grep zones
rpool/zones                                   368M   844G    32K  /zones
rpool/zones/testzone                          368M   844G    32K  /zones/testzone
rpool/zones/testzone/rpool                    368M   844G    31K  /rpool
rpool/zones/testzone/rpool/ROOT               368M   844G    31K  legacy
rpool/zones/testzone/rpool/ROOT/solaris       367M   844G   310M  /zones/testzone/root
rpool/zones/testzone/rpool/ROOT/solaris/var  57.3M   844G  56.4M  /zones/testzone/root/var
rpool/zones/testzone/rpool/export              62K   844G    31K  /export
rpool/zones/testzone/rpool/export/home         31K   844G    31K  /export/home

可以看到,已经自动为您创建了 /zones/zones/testzone 数据集。将 Oracle Solaris 区域置于 ZFS 数据集上可以实现克隆和快照等功能,并使 Oracle Solaris 区域能充分利用 ZFS。

testzone 的大小只有 368 MB。Oracle Solaris 区域占用空间很小,这反映了 Oracle Solaris 区域是一种非常轻量级的虚拟化技术。

第 3 步:引导和完成系统配置

启动和运行 testzone 的最后一步是引导它并设置系统配置。

  1. 运行以下命令引导该区域,然后访问其控制台:

    root@global:~# zoneadm -z testzone boot; zlogin -C testzone
    

    zlogin-C 选项允许我们访问区域控制台,即它将我们带入区域并允许我们在区域内工作。

    因为没有可用的系统配置文件,所以启动了 System Configuration Tool,如图 3 所示。

    图 3

    图 3. System Configuration Tool

  2. F2 继续。
  3. 输入 testzone 作为计算机名称,如图 4 所示,高亮显示 Manually 手动配置网络,然后按 F2 继续。

    :在本示例中,我们未选择“Automatically”,但如果您选择了它,则根本不必输入任何网络信息,因为该工具会替您完成配置。

    图 4

    图 4. 选择手动配置

  4. 为网络输入适当的网络设置,如图 5 所示,然后按 F2

    图 5

    图 5. 输入网络设置

  5. 此时不配置 DNS(参见图 6),因此按 F2

    图 6

    图 6. 选择不配置 DNS

  6. 此时不设置名称服务,因此按 F2

    图 7

    图 7. 选择不设置名称服务

  7. 选择适合您所在位置的时区区域,如图 8 所示,然后按 F2

    图 8

    图 8. 选择时区区域

  8. 选择相应的位置,如图 9 所示,然后按 F2

    图 9

    图 9. 选择位置

  9. 选择相应的时区,如图 10 所示,然后按 F2

    图 10

    图 10. 选择时区

  10. 输入 root 口令、您的姓名、用户名和用户口令完成配置,如图 11 所示。然后按 F2

    图 11

    图 11. 完成配置

  11. 验证所选配置是否正确,然后按 F2 应用这些设置。

    图 12

    图 12. 验证配置

区域将继续引导,很快您就会看到控制台登录,如清单 4 所示。

清单 4:区域引导过程的输出
[ system/system-log:default starting (system log) ]
[ system/auditd:default starting (Solaris audit daemon) ]
[ network/smtp:sendmail starting (sendmail SMTP mail transfer agent) ]
[ network/sendmail-client:default starting (sendmail SMTP client queue runner) ]
Oct 16 13:13:15 testzone sendmail[8911]: My unqualified host name (testzone) unknown; sleeping for retry
Oct 16 13:13:15 testzone sendmail[8913]: My unqualified host name (testzone) unknown; sleeping for retry
[ system/console-login:default starting (Console login) ]

testzone console login: 

区域现在已准备好,您可以登录了。在本示例中,现在使用“~.”转义序列退出控制台。

通过使用 zoneadm 命令可以检查该区域是否已经引导并运行:

root@global:~# zoneadm list -v
  ID NAME             STATUS     PATH                           BRAND    IP    
   0 global           running    /                              solaris  shared
   2 testzone         running    /zones/testzone                solaris  excl  

与希望的一样,当区域引导时,自动为我们创建了 VNIC。可以使用 dladm 命令对此进行检查:

root@global:~# dladm show-link
LINK                CLASS     MTU    STATE    OVER
e1000g0             phys      1500   up       --
e1000g1        phys      1500   unknown  --
testzone/net0       vnic      1500   up   e1000g0

可以看到,VNIC 列出为 testzone/net0

第 4 步:登录区域

最后一步是登录您的区域去看看。可以从全局区域使用 zlogin 命令来实现,如清单 5 所示。

清单 5:登录区域
root@global:~# zlogin testzone
[Connected to zone 'testzone' pts/3]
Oracle Corporation	SunOS 5.11	11.0 November 2011
root@testzone:~# uname -a
SunOS testzone 5.11 11.0 i86pc i386 i86pc
root@testzone:~# ipadm show-addr
ADDROBJ           TYPE     STATE        ADDR
lo0/v4            static   ok  127.0.0.1/8
net0/v4           static   ok           10.134.79.241/24
lo0/v6            static   ok           ::1/128
net0/v6           addrconf ok           fe80::8:20ff:fe6f:9645/10
root@testzone:~# dladm show-link
LINK                CLASS     MTU    STATE    OVER
net0                vnic      1500   up       ?
root@testzone:~# zfs list
NAME                     USED  AVAIL  REFER  MOUNTPOINT
rpool                    400M   843G    31K  /rpool
rpool/ROOT               400M   843G    31K  legacy
rpool/ROOT/solaris       400M   843G   341M  /
rpool/ROOT/solaris/var  58.1M   843G  57.1M  /var
rpool/export            96.5K   843G    32K  /export
rpool/export/home       64.5K   843G    32K  /export/home
rpool/export/home/fred  32.5K   843G  32.5K  /export/home/fred
root@testzone:~# exit
logout

[Connection to zone 'testzone' pts/3 closed]

:我们未使用 zlogin 命令的 -C 选项,这意味着未通过区域的控制台访问它。这样我们就可以在结束时直接退出 shell 离开区域。

我们来看看有什么发现:

  • uname 命令显示我们运行在 Oracle Solaris 11 上。
  • ipadm 命令显示 testzone 的 IP 地址。一共有四项:两个环回设备(IPv4 和 IPv6)、IP 地址为 10.134.79.241 的 IPv4 net0 设备,最后是一个 IPv6 net0 设备。
  • dladm 命令显示自动创建的 net0 VNIC。
  • zfs list 命令显示我们的 ZFS 数据集。

:从 testzone 内部看不到有关全局区域的任何信息。只能看到我们自己区域的属性。

现在验证了 testzone 已启动并正在运行。您可以将用户登录和口令提供给开发团队的管理员,让管理员就像是一个系统一样完成团队区域的设置。

Oracle Solaris 区域和联网

Oracle Solaris 11 中新增了一项功能:现在默认情况下将使用专用 IP 网络资源自动创建 Oracle Solaris 区域。这意味着 Oracle Solaris 区域有权访问整个网络体系,从而允许区域管理员执行设置自己的 IP 地址和路由等操作。

使用 zonecfg 命令利用默认模板创建 testzone(在第 1 步:配置 Oracle Solaris 区域中)时,区域配置中将自动包括一个具有以下属性的名为 anet 的网络资源:

  • linknamenet0
  • lower-linkauto
  • mac-addressrandom
  • link-protectionmac-nospoof

可以使用 zonecfg 命令查看这些内容,如清单 6 所示。

清单 6:查看网络资源的属性
root@global:~# zonecfg -z testzone info
zonename: testzone
zonepath: /zones/testzone
brand: solaris
autoboot: true
bootargs: -m verbose
file-mac-profile: 
pool: 
limitpriv: 
scheduling-class: 
ip-type: exclusive
hostid: 
fs-allowed: 
anet:
	linkname: net0
	lower-link: auto
	allowed-address not specified
	configure-allowed-address: true
	defrouter not specified
	allowed-dhcp-cids not specified
	link-protection: mac-nospoof
	mac-address: random
	mac-prefix not specified
	mac-slot not specified
	vlan-id not specified
	priority not specified
	rxrings not specified
	txrings not specified
	mtu not specified
	maxbw not specified
	rxfanout not specified

可以看到,anet 网络设备已自动配置。如前所述,该资源分别在区域引导和关闭时自动创建和删除。这可以按下面的办法来查看。

首先,检查全局区域的 IP 地址:

root@global:~# ipadm show-addr
ADDROBJ           TYPE     STATE        ADDR
lo0/v4            static   ok           127.0.0.1/8
e1000g0/_a        static   ok           10.134.79.168/24
lo0/v6            static   ok           ::1/128

使用 dladm 查看数据链路状态:

root@global:~# dladm show-link
LINK                CLASS     MTU    STATE    OVER
e1000g0             phys      1500   up       --
e1000g1             phys      1500   unknown  --
testzone/net0       vnic      1500   up       e1000g0

注意是如何为 testzone 自动创建了一个连接到 e1000g0 的 VNIC (testzone/net0)。

登录到 testzone,检查链路状态和 IP 地址,然后 ping 全局区域,如清单 7 所示。

清单 7:检查链路状态和 IP 地址
root@testzone:~# zlogin testzone
root@testzone:~# dladm show-link
LINK                CLASS     MTU    STATE    OVER
net0                vnic      1500   up       ?
root@testzone:~# ipadm show-addr
ADDROBJ           TYPE     STATE        ADDR
lo0/v4            static   ok           127.0.0.1/8
net0/v4           static   ok           10.134.79.241/24
lo0/v6            static   ok           ::1/128
net0/v6           addrconf ok           fe80::8:20ff:fec4:32bb/10
root@testzone:~# ping 10.134.79.168
10.134.79.168 is alive
root@testzone:~# exit
logout

[Connection to zone 'testzone' pts/3 closed]

创建 webzone-1 并添加应用程序

现在创建第二个区域 webzone-1(用于面向 Web 的应用程序)并向其添加一个应用程序。

第 1 步:使用最少的信息创建 webzone-1

同样先使用 zonecfg 创建 webzone-1。不过,这次为了演示建立区域是多么迅速和方便,我们将只提供所需的最基本信息 zonepath:

root@global:~# zonecfg -z webzone-1 "create ; set zonepath=/zones/webzone-1"

可以使用 zonecfg 命令查看区域配置,如清单 8 所示。

清单 8:检查新区域的配置
root@global:~# zonecfg -z webzone-1 info
zonename: webzone-1
zonepath: /zones/webzone-1
brand: solaris
autoboot: false
bootargs: 
file-mac-profile: 
pool: 
limitpriv: 
scheduling-class: 
ip-type: exclusive
hostid: 
fs-allowed: 
anet:
	linkname: net0
	lower-link: auto
	allowed-address not specified
	configure-allowed-address: true
	defrouter not specified
	allowed-dhcp-cids not specified
	link-protection: mac-nospoof
	mac-address: random
	mac-prefix not specified
	mac-slot not specified
	vlan-id not specified
	priority not specified
	rxrings not specified
	txrings not specified
	mtu not specified
	maxbw not specified
	rxfanout not specified

就是这样。就配置而言,任务已经完成。

第 2 步:安装 webzone-1

接下来安装该区域,如清单 9 所示。

清单 9:安装区域
root@global:~# zoneadm -z webzone-1 install
A ZFS file system has been created for this zone.
Progress being logged to /var/log/zones/zoneadm.20111016T143052Z.webzone-1.install
       Image: Preparing at /zones/webzone-1/root.

 Install Log: /system/volatile/install.10393/install_log
 AI Manifest: /tmp/manifest.xml.Iza4ru
  SC Profile: /usr/share/auto_install/sc_profiles/enable_sci.xml
    Zonename: webzone-1
Installation: Starting ...

              Creating IPS image
              Installing packages from:
                  solaris
                      origin:  http://pkg.oracle.com/solaris/release/
DOWNLOAD                                  PKGS       FILES    XFER (MB)
Completed                              167/167 32062/32062  175.8/175.8

PHASE                                        ACTIONS
Install Phase                            44311/44311 

PHASE                                          ITEMS
Package State Update Phase                   167/167 
Image State Update Phase                         2/2 
Installation: Succeeded

        Note: Man pages can be obtained by installing pkg:/system/manual

 done.

        Done: Installation completed in 108.257 seconds.


  Next Steps: Boot the zone, then log into the zone console (zlogin -C)

              to complete the configuration process.

Log saved in non-global zone as /zones/webzone-1/root/var/log/zones/zoneadm.20111016T143052Z.webzone-1.install

第 3 步:引导和配置 webzone-1

引导 webzone-1,登录到控制台,除了 IP 地址之外,输入与前面针对 testzone 一样的设置。将 IP 地址设置为 10.134.79.242。

root@global:~# zoneadm -z webzone-1 boot; zlogin -C webzone-1

如果您对步骤不清楚,可以参考前面的第 3 步:引导和完成系统配置。最后,记得使用“~.”转义序列退出控制台。

webzone-1 添加应用程序

现在,已有一个运行的区域连接到网络,下面需要在该区域中放置一个应用程序。在本例中,因为这将是服务于 Web 内容的区域,我们来添加 Apache Web 服务器。

从全局区域登录 webzone-1 并检查 Apache Web 服务器程序包的状态:

root@global:~# zlogin webzone-1
[Connected to zone 'webzone-1' pts/3]
Oracle Corporation      SunOS 5.11      11.0    November 2011
root@webzone-1:~# pkg info /web/server/apache-22
pkg: info: no packages matching the following patterns you specified are
installed on the system.  Try specifying -r to query remotely:

        /web/server/apache-22

该程序包未安装。我们使用 -r 选项远程查询 IPS 信息库来核实一下,如清单 10 所示。

清单 10:检查是否安装了 Apache Web 服务器程序包
root@webzone-1:~# pkg info -r /web/server/apache-22
          Name: web/server/apache-22
       Summary: Apache Web Server V2.2
   Description: The Apache HTTP Server Version 2.2
      Category: Web Services/Application and Web Servers
         State: Not installed
     Publisher: solaris
       Version: 2.2.20
 Build Release: 5.11
        Branch: 0.175.0.0.0.1.530
Packaging Date: Wed Oct 12 14:13:31 2011
          Size: 9.24 MB
          FMRI: pkg://solaris/web/server/apache-22@2.2.20,5.11-0.175.0.0.0.1.530:20111012T141331Z

状态显示为 Not installed。因此我们在区域中安装 Apache Web 服务器,如清单 11 所示

清单 11:安装 Apache Web 服务器程序包
root@webzone-1:~# pkg install /web/server/apache-22
           Packages to install:  3
       Create boot environment: No
Create backup boot environment: No
            Services to change:  1

DOWNLOAD                                  PKGS       FILES    XFER (MB)
Completed                                  3/3     636/636      4.2/4.2

PHASE                                        ACTIONS
Install Phase                                800/800 

PHASE                                          ITEMS
Package State Update Phase                       3/3 
Image State Update Phase                         2/2 

我们看到,IPS 下载了需要的所有相关文件。无需弄清依赖项。在本例中,安装了三个程序包。可以再次使用 pkg info 命令检查 Apache Web 服务器的状态,如清单 12 所示。

清单 12:再次检查 Apache Web 服务器程序包
root@webzone-1:~# pkg info /web/server/apache-22
          Name: web/server/apache-22
       Summary: Apache Web Server V2.2
   Description: The Apache HTTP Server Version 2.2
      Category: Web Services/Application and Web Servers
         State: Installed
     Publisher: solaris
       Version: 2.2.20
 Build Release: 5.11
        Branch: 0.175.0.0.0.1.530
Packaging Date: Wed Oct 12 14:13:31 2011
          Size: 9.24 MB
          FMRI: pkg://solaris/web/server/apache-22@2.2.20,5.11-0.175.0.0.0.1.530:20111012T141331Z

这次状态显示为 Installed。祝贺您;您已向区域添加了第一个程序包。

使用克隆创建 webzone-2

现在来创建最后一个区域 webzone-2。只需重复创建其他区域所使用的过程即可,但在本例中,我们只是需要一个与 webzone-1 一样的另一个 Web 服务器环境。因此,不必重复配置过程,我们来克隆一个 webzone-1。实际上,我们使用 webzone-1 作为区域创建的全局母版。

第 1 步:创建区域系统配置模板

为避免不得不手动配置克隆区域的系统属性,我们首先为 webzone-2 创建一个系统 ID 模板。这可以通过从 webzone-1 内使用 sysconfig 工具来实现:

root@global:~# zlogin webzone-1
root@webzone-1:~# sysconfig create-profile -o /root/webzone-2-template.xml

:使用 sysconfig 工具创建配置文件时,请确保在输出文件名中使用 .xml 扩展名。

完成为 webzone-2 输入正确信息(记住这次使用 10.134.79.243 作为 IP 地址)的所有屏幕。如在第 3 步:引导和完成系统配置部分中一样,完成配置时您将看到已经创建配置文件。最后,退出并返回全局区域。

Exiting System Configuration Tool. Log is available at:
/var/tmp/install/sysconfig.log
root@webzone-1:~# ls
webzone-2-template.xml
root@webzone-1:~# exit
logout

[Connection to zone 'webzone-1' pts/2 closed]

:使用 sysconfig 工具时,不允许在用户帐户部分使用任何现有用户名。在本例中,不能使用用户名 fred,因此选择了 jack

在稍后的步骤中,我们会将此文件复制到一个更方便的位置。

第 2 步:创建区域配置文件

首先,需要从系统的全局区域停止要克隆的区域 webzone-1。(不能克隆正在运行的区域。)使用 zoneadm list 验证该区域是否关闭,如清单 3 所示。

清单 13:验证区域是否关闭
root@global:~# zoneadm list -iv
  ID NAME             STATUS     PATH                           BRAND    IP    
   0 global           running    /                              solaris  shared
   2 testzone         running    /zones/testzone                solaris  excl  
   3 webzone-1        running    /zones/webzone-1               solaris  excl  
root@global:~# zoneadm -z webzone-1 shutdown
root@global:~# zoneadm list -iv
  ID NAME             STATUS     PATH                           BRAND    IP    
   0 global           running    /                              solaris  shared
   2 testzone         running    /zones/testzone                solaris  excl  
   - webzone-1        installed  /zones/webzone-1               solaris  excl  

现在来捕获 webzone-1 区域的配置并将其用作要创建的其他区域(在本例中为 webzone-2)的主配置文件模板:

root@global:~# zonecfg -z webzone-1 export -f /zones/webzone-2-profile

使用您最喜爱的编辑器,使该文件看上去如清单 14 所示。(您始终需要更新 zonepath,但我们已经选择更新 autoboot。)

清单 14:编辑模板
root@global:~# cat /zones/webzone-2-profile
create -b
set zonepath=/zones/webzone-2
set brand=solaris
set autoboot=true
set ip-type=exclusive
add anet
set linkname=net0
set lower-link=auto
set configure-allowed-address=false
set link-protection=mac-nospoof
set mac-address=random
set auto-mac-address=2:8:20:f1:e4:b7
end

现在我们要将前面创建的系统配置模板 (webzone-2-template.xml) 放到一个更方便的位置。幸运地是,在区域关闭时仍可访问它的文件系统。

root@global:~# pwd
/root
root@global:~# cp /zones/webzone-1/root/root/webzone-2-template.xml /zones
root@global:~# ls /zones/webzone-2-template.xml 
/zones/webzone-2-template.xml

第 3 步:通过克隆 webzone-1 创建 webzone-2

下一步使用修改的配置创建 webzone-2(使用 zonecfg),然后执行 webzone-1 的克隆(使用 zoneadm)。记住向系统配置模板添加完整路径。请注意克隆完成的速度是多么快。(这可以通过将 time 命令附加到 zonecfg clone 命令来查看。)

root@global:~# zonecfg -z webzone-2 -f /zones/webzone-2-profile
root@global:/zones# time zoneadm -z webzone-2 clone -c /zones/webzone-2-template.xml webzone-1
A ZFS file system has been created for this zone.
Progress being logged to /var/log/zones/zoneadm.20111029T193536Z.webzone-2.clone
Log saved in non-global zone as /zones/webzone-2/root/var/log/zones/zoneadm.20111029T193536Z.webzone-2.clone

real	0m13.269s
user	0m1.740s
sys	0m2.716s

克隆 webzone-1 只用了 13 秒。此外,因为使用 clone 命令,我们利用了 ZFS 快照。我们来检查一下 webzone-1webzone-2 占用的磁盘空间,如清单 15 所示。

清单 15:检查磁盘空间
root@global:/zones# zfs list | grep webzone
rpool/zones/webzone-1                            470M   843G    33K  /zones/webzone-1
rpool/zones/webzone-1/rpool                      470M   843G    31K  /rpool
rpool/zones/webzone-1/rpool/ROOT                 470M   843G    31K  legacy
rpool/zones/webzone-1/rpool/ROOT/solaris         470M   843G   366M  /zones/webzone-1/root
rpool/zones/webzone-1/rpool/ROOT/solaris/var    97.8M   843G  57.9M  /zones/webzone-1/root/var
rpool/zones/webzone-1/rpool/export              96.5K   843G    32K  /export
rpool/zones/webzone-1/rpool/export/home         64.5K   843G    32K  /export/home
rpool/zones/webzone-1/rpool/export/home/fred    32.5K   843G  32.5K  /export/home/fred
rpool/zones/webzone-2                            350K   843G    34K  /zones/webzone-2
rpool/zones/webzone-2/rpool                      316K   843G    31K  /rpool
rpool/zones/webzone-2/rpool/ROOT                 295K   843G    31K  legacy
rpool/zones/webzone-2/rpool/ROOT/solaris-0       294K   843G   366M  /zones/webzone-2/root
rpool/zones/webzone-2/rpool/ROOT/solaris-0/var    39K   843G  57.9M  /zones/webzone-2/root/var
rpool/zones/webzone-2/rpool/export                 3K   843G    32K  /export
rpool/zones/webzone-2/rpool/export/home            2K   843G    32K  /export/home
rpool/zones/webzone-2/rpool/export/home/fred       1K   843G  32.5K  /export/home/fred

即使在添加 Apache Web 服务器之后,webzone-1 也只有 470 M。webzone-1 的精确副本 webzone-2 的情况更好,它只有 350 K,大大节省了磁盘空间。

最后,引导 webzone-2 并观察控制台。有时,您将看到正在应用的系统配置。从下面可以看到,已经从模板为我们设置了主机名。

root@global:~# zoneadm -z webzone-2 boot; zlogin -C webzone-2
 [Connected to zone 'webzone-2' console]

Hostname: unknown
Unconfiguration failed for svc:/system/config-user:default
Hostname: webzone-2

webzone-2 console login: ~.
[Connection to zone 'webzone-2' console closed]

记得使用“~.”转义序列退出控制台。

注意,现在已有一个用于 webzone-2.xml 模板。我们可以非常轻松地复制和编辑此模板,使得我们可以同样快速地部署全套其他 Web 区域。

现在登录 webzone-2 并查找 Apache Web 服务器程序包,如清单 16 所示。

清单 16:查找 Apache Web 服务器程序包
root@global:~# zlogin webzone-2
[Connected to zone 'webzone-2' pts/3]
Oracle Corporation	SunOS 5.11	11.0	November 2011
root@webzone-2:~# pkg info /web/server/apache-22
          Name: web/server/apache-22
       Summary: Apache Web Server V2.2
   Description: The Apache HTTP Server Version 2.2
      Category: Web Services/Application and Web Servers
         State: Installed
     Publisher: solaris
       Version: 2.2.20
 Build Release: 5.11
        Branch: 0.175.0.0.0.1.530
Packaging Date: Wed Oct 12 14:13:31 2011
          Size: 9.24 MB
          FMRI: pkg://solaris/web/server/apache-22@2.2.20,5.11-0.175.0.0.0.1.530:20111012T141331Z

可以看到,与前面不同,当从头开始创建区域时,必须添加到 webzone-1 的 Apache Web 服务器程序包已经存在。当已创建了具有所有其他程序包和配置的“主”区域时,常常使用此克隆方法。然后当需要新的类似环境时,只需克隆主区域。

还可以检查 IP 地址是否已正确应用:

root@webzone-2:~# ipadm show-addr
ADDROBJ           TYPE     STATE        ADDR
lo0/v4            static   ok           127.0.0.1/8
net0/v4           static   duplicate    10.134.79.243/24
lo0/v6            static   ok           ::1/128
net0/v6           addrconf ok           fe80::8:20ff:fe7a:7b0f/10

:Oracle Solaris 自动安装程序还提供了一种方法,即作为系统安装服务的一部分创建准备好的区域。

总结

在本文中,我们了解了如何创建、安装、引导和配置 Oracle Solaris 区域。还了解了如何自动创建 ZFS 数据集以及如何自动为您设置网络。最后,了解了如何使用 IPS 将应用程序添加到 Oracle Solaris 区域然后克隆该区域。

更多信息

下面是其他一些资源:

修订版 1.0,2011 年 11 月 3 日